package com.ruoyi.system.service;

import com.ruoyi.system.domain.PracticeInfoReport;
import com.ruoyi.system.domain.TrainingCadet;
import com.ruoyi.system.domain.TrainingCadetExpand;
import com.ruoyi.system.domain.TrainingInfoReport;

import java.util.Date;
import java.util.List;

/**
 * 培训学员信息Service接口
 *
 * @author dp
 * @date 2023-11-27
 */
public interface ITrainingCadetService {
    /**
     * 查询培训学员信息
     *
     * @param cadetId 培训学员信息主键
     * @return 培训学员信息
     */
    public TrainingCadet selectTrainingCadetByCadetId(String cadetId);

    /**
     * 查询培训对象当前扩展信息
     *
     * @param cadetId 培训学员信息主键
     * @return 培训对象扩展信息
     */
    public TrainingCadetExpand selectNowExpandInfo(String cadetId);

    /**
     * 查询培训学员信息列表
     *
     * @param trainingCadet 培训学员信息
     * @return 培训学员信息集合
     */
    public List<TrainingCadet> selectTrainingCadetList(TrainingCadet trainingCadet);

    /**
     * 新增培训学员信息
     *
     * @param trainingCadet 培训学员信息
     * @return 结果
     */
    public int insertTrainingCadet(TrainingCadet trainingCadet);

    /**
     * 修改培训学员信息
     *
     * @param trainingCadet 培训学员信息
     * @return 结果
     */
    public int updateTrainingCadet(TrainingCadet trainingCadet);

    /**
     * 批量删除培训学员信息
     *
     * @param cadetIds 需要删除的培训学员信息主键集合
     * @return 结果
     */
    public int deleteTrainingCadetByCadetIds(String[] cadetIds);

    /**
     * 删除培训学员信息信息
     *
     * @param cadetId 培训学员信息主键
     * @return 结果
     */
    public int deleteTrainingCadetByCadetId(String cadetId);

    /**
     * 实体数据补全
     *
     * @param trainingCadet 实体
     * @param userId        用户id
     * @param crateType     创建类型 1：新增 2：修改
     */
    public void completeData(TrainingCadet trainingCadet, Long userId, Integer crateType);

    /**
     * 实践内容统计
     *
     * @param baseId    基地Id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 实践内容统计
     */
    public List<PracticeInfoReport> selectPracticeInfoReport(Long baseId, Date startTime, Date endTime);

    /**
     * 培训内容统计
     *
     * @param baseId    基地Id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 培训内容统计
     */
    public List<TrainingInfoReport> selectTrainingInfoReport(Long baseId, Date startTime, Date endTime);
}
